package com.candy.reflectdemo;

import java.lang.reflect.Method;

/**
 * @author donglin
 * @Title:反射工具类-Method类
 * @类名: Test02
 * @date 2020/6/4
 */
public class Test02 {
    public static void main(String[] args) {
    test02();
    }

    /*/**
     * 方法描述:获取类下所有方法
     *
     */
    public static void test02() {
        //获取类文件对象
        Class type1 = Student.class;

        try {
            //使用指定方法名和参数列表指定具体的Method对象
            Method md = type1.getDeclaredMethod("sayHi");
            Method md2=type1.getDeclaredMethod("sayHi",
                    String.class);
            //使用Class类newInstance()方法，实例化对象
            Student st= (Student) type1.newInstance();
            System.out.print("调用空参的sayHi方法");
            //使用Method类的invoke方法，执行该方法
            //第一个参数，是执行该方法的对象
            //第二个参数，需要给定实参，如果是空参的方法，此处可以不写
            md.invoke(st);
            System.out.print("调用有参的sayHi方法");
            md2.invoke(st,"张三");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


        /*/**
     * 方法描述:获取类下所有方法
     *
    */
    public static void test01() {
        //获取类文件对象
        Class type1=Student.class;
        //获取该类下所有方法
        Method[] md=type1.getDeclaredMethods();
        for (Method m:md) {
            //遍历所有方法，打印方法名
            System.out.println(m.getName());
        }




    }



}
